<?php
class Response {
    /**
     * 输出成功响应
     * @param mixed $data 响应数据（可选）
     * @param string $message 提示信息（默认：操作成功）
     * @param int $code HTTP状态码（默认：200）
     */
    public static function success($data = null, string $message = '操作成功', int $code = 200) {
        self::sendResponse($code, $message, $data);
    }
    
    /**
     * 输出创建成功响应（通常用于POST创建资源）
     * @param mixed $data 响应数据（可选）
     * @param string $message 提示信息（默认：创建成功）
     */
    public static function created($data = null, string $message = '创建成功') {
        self::sendResponse(201, $message, $data);
    }
    
    /**
     * 输出错误响应
     * @param string $message 错误提示
     * @param mixed $details 错误详情（可选，如具体错误原因）
     * @param int $code HTTP状态码（默认：400）
     */
    public static function error(string $message = '操作失败', $details = null, int $code = 400) {
        $responseData = [
            'code' => $code,
            'message' => $message,
            'timestamp' => time() * 1000 // 毫秒级时间戳
        ];
        
        // 只有存在详情时才添加该字段
        if ($details !== null) {
            $responseData['details'] = $details;
        }
        
        self::sendRawResponse($code, $responseData);
    }
    
    /**
     * 输出资源不存在响应
     * @param string $message 提示信息（默认：资源不存在）
     */
    public static function notFound(string $message = '资源不存在') {
        self::error($message, null, 404);
    }
    
    /**
     * 输出服务器错误响应
     * @param string $message 提示信息（默认：服务器内部错误）
     * @param mixed $details 错误详情（可选，建议生产环境隐藏）
     */
    public static function serverError(string $message = '服务器内部错误', $details = null) {
        self::error($message, $details, 500);
    }
    
    /**
     * 核心响应发送方法
     */
    private static function sendResponse(int $code, string $message, $data = null) {
        $responseData = [
            'code' => $code,
            'message' => $message,
            'timestamp' => time() * 1000
        ];
        
        // 只有存在数据时才添加data字段
        if ($data !== null) {
            $responseData['data'] = $data;
        }
        
        self::sendRawResponse($code, $responseData);
    }
    
    /**
     * 发送原始响应数据
     */
    private static function sendRawResponse(int $code, array $responseData) {
        // 设置HTTP状态码
        http_response_code($code);
        
        // 设置JSON响应头
        header('Content-Type: application/json; charset=utf-8');
        
        // 输出JSON数据（确保中文正常显示）
        echo json_encode($responseData, JSON_UNESCAPED_UNICODE);
        
        // 终止脚本，避免后续输出干扰
        exit;
    }
}
?>
    